using System;
using Avalonia.Controls;
using Avalonia.Controls.Templates;
using DesktopApp.ViewModels; // 确认 ViewModel 命名空间

namespace DesktopApp // 确认 App 命名空间
{
    public class ViewLocator : IDataTemplate
    {
        public Control? Build(object? data)
        {
            if (data is null)
                return null;

            var name = data.GetType().FullName!.Replace("ViewModel", "View", StringComparison.Ordinal);
            // 假设 View 和 ViewModel 在不同的命名空间，例如 DesktopApp.Views
            // 可能需要调整这里的逻辑以匹配你的项目结构
            // var name = data.GetType().FullName!.Replace("ViewModel", "View").Replace("DesktopApp.ViewModels", "DesktopApp.Views"); 
            var type = Type.GetType(name);

            if (type != null)
            {
                // 确保 View 类存在并且可以被实例化
                try
                {
                   return (Control)Activator.CreateInstance(type)!;
                }
                catch (Exception ex)
                {
                    // Log the exception if needed
                    Console.WriteLine($"Error creating view for {name}: {ex.Message}");
                    return new TextBlock { Text = $"Error: {ex.Message}" };
                }
            }

            return new TextBlock { Text = "Not Found: " + name };
        }

        public bool Match(object? data)
        {
            // 在这里替换为你正确的 ViewModel 基类！
            return data is ViewModelBase; 
            // 或者 return data is ObservableObject; 
        }
    }
} 